package com.roc.producer.messageType;

import org.apache.rocketmq.client.producer.DefaultMQProducer;
import org.apache.rocketmq.common.message.Message;
import org.apache.rocketmq.remoting.common.RemotingHelper;

/**
 * 重试消息-生产者
 *
 * @author Roker
 * @date 2025/07/08
 */
public class RetryMsgProducer {
    public static void main(String[] args) throws Exception {
        // 1、实例化生产者，指定生产者组名
        DefaultMQProducer producer = new DefaultMQProducer("roc_producer_group");
        // 2、设置NameServer的地址
        producer.setNamesrvAddr("127.0.0.1:9876");
        // 3、设置同步消息发送失败时的最大重试次数
        producer.setRetryTimesWhenSendFailed(3);
        // 4、设置异步消息发送失败时最大的重试次数
        producer.setRetryTimesWhenSendAsyncFailed(3);
        // 5、启动生产者实例
        producer.start();
        // 6、发送消息
        for (int i = 0; i < 10; i++) {
            try {
                Message msg = new Message("TOPIC_RETRY",
                        null,
                        ("发送重试消息-" + i).getBytes(RemotingHelper.DEFAULT_CHARSET)
                );
                // 消息在1S内没有发送成功，就会按照设置的次数进行重试
                producer.send(msg, 1000);
                System.out.printf("消息发送成功，%s%n", msg);
            } catch (Exception e) {
                e.printStackTrace();
                Thread.sleep(1000);
            }
        }
        // 7、关闭生产者
        producer.shutdown();
    }
}
